package main

import "fmt"

/**
四种变量声明方式
*/

// 声明全局变量  方法1、2、3是可以的
var gA int = 100
var gB int = 200
var gC int = 300

// 使用 := 的时候必须在函数体内来声明 不能声明全局变量

func main() {
	// 方法1 声明1个变量 默认值为0
	var a int
	fmt.Println(a)
	fmt.Printf("type of a = %T\n", a)

	// 方法2 声明一个变量 初始化一个值
	var b int = 100
	fmt.Println(b)
	fmt.Printf("type of b = %T\n", b)

	// 方法3 在初始化的时候 可以省去数据类型 自动用初始值进行匹配
	var c = 100
	fmt.Println(c)
	fmt.Printf("type of c = %T\n", c)

	var dd string = "abcd"
	fmt.Printf("type of dd = %T\n", dd)

	// 方法4 常用方法 省去var关键字 直接自动匹配类型
	// 使用 := 自动推测出他的类型
	e := 100
	fmt.Println("e=", e)

	f := "abcd"
	fmt.Println("f=", f)

	g := 3.14141414
	fmt.Println("g=", g)
	fmt.Printf("type of g = %T\n", g)

	fmt.Println("=======================")

	fmt.Println("gA", gA)

	fmt.Println("=======================")

	//声明多个变量
	var xx, yy, zz int = 100, 200, 300
	fmt.Println("xx=", xx, "yy=", yy, "zz=", zz)
	var kk, ll = 100, "abcd"
	fmt.Println("kk=", kk, "ll=", ll)
	//多行多变量声明
	var (
		vv int  = 100
		jj bool = true
	)
	fmt.Println("vv=", vv, "jj=", jj)
}
